package com.taotao.portal.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.taotao.common.bean.TaotaoResult;
import com.taotao.common.utils.CookieUtils;
import com.taotao.common.utils.HttpClientUtil;
import com.taotao.common.utils.JsonUtils;
import com.taotao.pojo.TbItem;
import com.taotao.portal.pojo.CartItem;
import com.taotao.portal.service.CartServie;

@Service
public class CartItemServiceImpl implements CartServie {

	@Value("${REST_BASE_URL}")
	private String REST_BASE_URL;
	@Value("${ITEM_INFO_URL}")
	private String ITEM_INFO_URL;

	@Override
	public TaotaoResult addCartItem(long itemId, int num, HttpServletRequest request, HttpServletResponse response) {
		// 获取购物车列表
		List<CartItem> cartList = getCartList(request);

		// 创建购物车商品对象
		CartItem cartItem = null;

		// 判断购物车是否有此商品
		for (CartItem cItem : cartList) {
			// 如果id匹配，说明有此商品
			if (itemId == cItem.getId()) {
				// 在原有数量加新的数量
				cItem.setNum(cItem.getNum() + num);
				// 返回给购物车商品，跳出
				cartItem = cItem;
				break;
			}
		}
		// 如果购物车无此商品
		if (null == cartItem) {
			// 新建此商品到购物车
			cartItem = new CartItem();
			// 根据商品ID查询商品
			String json = HttpClientUtil.doGet(REST_BASE_URL + ITEM_INFO_URL + itemId);
			// 把json转换成Java对象
			TaotaoResult taotaoResult = TaotaoResult.formatToPojo(json, TbItem.class);
			if (taotaoResult.getStatus() == 200) {
				TbItem item = (TbItem) taotaoResult.getData();
				cartItem.setId(item.getId());
				cartItem.setNum(num);
				cartItem.setTitle(item.getTitle());
				cartItem.setPrice(item.getPrice());
				cartItem.setImage(item.getImage() == null ? "" : item.getImage().split(",")[0]);
			}
			// 加入购物车
			cartList.add(cartItem);
		}
		// 把购物车写入cookie
		CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.objectToJson(cartList), true);
		return TaotaoResult.ok();
	}

	private List<CartItem> getCartList(HttpServletRequest request) {
		// 从cookie取购物车商品列表
		String cartJson = CookieUtils.getCookieValue(request, "TT_CART", true);
		if (null == cartJson) {
			return new ArrayList<>();
		}
		// 若有，转换成商品列表
		try {
			List<CartItem> list = JsonUtils.jsonToList(cartJson, CartItem.class);
			return list;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return new ArrayList<>();

	}

	public List<CartItem> getCartItemList(HttpServletRequest request, HttpServletResponse response) {
		List<CartItem> cartList = getCartList(request);
		return cartList;
	}

	/**
	 * 根据id，修改购物车中商品数目
	 */
	@Override
	public TaotaoResult updateNum(long itemId, Integer num, HttpServletRequest request, HttpServletResponse response) {
		// 获取购物车列表
		List<CartItem> cartList = getCartList(request);
		for (CartItem cartItem : cartList) {
			if (itemId == cartItem.getId()) {
				cartItem.setNum(num);
				break;
			}
		}
		// 把购物车写入cookie
		CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.objectToJson(cartList), true);
		return null;
	}

	@Override
	public TaotaoResult deleteItem(long itemId, HttpServletRequest request, HttpServletResponse response) {
		// 获取购物车列表
		List<CartItem> cartList = getCartList(request);
		for (CartItem cartItem : cartList) {
			if (itemId == cartItem.getId()) {
				cartList.remove(cartItem);
				break;
			}
		}
		// 把购物车写入cookie
		CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.objectToJson(cartList), true);
		return null;
	}

}
